//
//  CZHomeViewController.swift
//  05.08--weibo
//
//  Created by fennyYang on 16/5/10.
//  Copyright © 2016年 a. All rights reserved.
//

import UIKit

// 打通数据 -> 获取服务器的数据，看看有没有什么问题
class CZHomeViewController: CZBaseTableViewController
{
     // MARK: - 属性
     private let reuseIdentifier = "cell"

     // 要显示的微博数据
     var statuses: [CZStaus]?
     {
          didSet
          {
               // 模型数据改变了
               self.tableView.reloadData()
          }
     }

    override func viewDidLoad()
    {
        super.viewDidLoad()

        // 没有登录就不要执行后面的代码
        if !CZUserAccountViewModel.sharedInstance.isUserLogin
        {
             return
        }

         setupNavigationBar()

     // 注册cell
     tableView.registerClass(CZStatusCell.self, forCellReuseIdentifier: reuseIdentifier)

     // 设置cell预估行高
     tableView.estimatedRowHeight = 200

     // 根据cell的约束自动计算行高，测量contentView的高度
     tableView.rowHeight = UITableViewAutomaticDimension


     // 取消tableViewcell的分隔线
     tableView.separatorStyle = UITableViewCellSeparatorStyle.None
     

     // 加载微博数据
     CZStatusViewModel.sharedInstance.loadStatus
     { (statuses,error) -> () in
          if error != nil
          {
               CZPrint(items: "请求微博数据失败了: \(error)")
               return
          }

          // 请求成功了
          CZPrint(items: "在控制器里面打印获取到的微博数据: \(statuses)")

          // 将网络请求返回的微博模型赋值给控制器的属性
          self.statuses = statuses


     }

    }

     // 设置导航栏
     private func setupNavigationBar()
     {
          // 方案1
          //        // 左边
          //        let leftButton = UIButton()
          //        leftButton.setImage(UIImage(named: "navigationbar_friendsearch"), forState: UIControlState.Normal)
          //        leftButton.setImage(UIImage(named: "navigationbar_friendsearch_highlighted"), forState: UIControlState.Highlighted)
          //        leftButton.sizeToFit()  // 让控件根据里面的内容是设置大小
          //
          //        navigationItem.leftBarButtonItem = UIBarButtonItem(customView: leftButton)
          //
          //        // 右边
          //        let rightButton = UIButton()
          //        rightButton.setImage(UIImage(named: "navigationbar_pop"), forState: UIControlState.Normal)
          //        rightButton.setImage(UIImage(named: "navigationbar_pop_highlighted"), forState: UIControlState.Highlighted)
          //        rightButton.sizeToFit()  // 让控件根据里面的内容是设置大小
          //
          //        navigationItem.rightBarButtonItem = UIBarButtonItem(customView: rightButton)

          // 方案2
          //        navigationItem.leftBarButtonItem = createBarButtonItem("navigationbar_friendsearch")
          //        navigationItem.rightBarButtonItem = createBarButtonItem("navigationbar_pop")

          // 方案3
          //        navigationItem.leftBarButtonItem = UIBarButtonItem.createBarButtonItem("navigationbar_friendsearch")
          //        navigationItem.rightBarButtonItem = UIBarButtonItem.createBarButtonItem("navigationbar_pop")

          // 方案4
          // 设置导航栏右按钮
          navigationItem.leftBarButtonItem = UIBarButtonItem(imageName: "navigationbar_friendsearch", target: self, action: "didClickFriendsearch")

          // 设置导航栏右按钮
          navigationItem.rightBarButtonItem = UIBarButtonItem(imageName: "navigationbar_pop", target: self, action: "didClickPop")

          // 获取用户的名称，测试
          let name = CZUserAccountViewModel.sharedInstance.userAccount?.screen_name ?? "未知名称"

          // 设置首页titleView
          let button = CZHomeTitleButtion()

          button.setTitle(name, forState: UIControlState.Normal)

          button.setTitleColor(UIColor.blackColor(), forState: UIControlState.Normal)

          button.titleLabel?.font = UIFont.systemFontOfSize(16)

          button.setImage(UIImage(named: "navigationbar_arrow_down"), forState: UIControlState.Normal)

          button.addTarget(self, action: "didClickTitlView:", forControlEvents: UIControlEvents.TouchUpInside)

          button.sizeToFit()

          navigationItem.titleView = button

     }

     // MARK: - 按钮点击事件
     func didClickTitlView(button: UIButton)
     {
          // 三角形旋转依靠button.selected这个属性来确定
          // 1.修改按钮状态
          button.selected = !button.selected

          // UIView动画选装，1.哪边近走哪边， 2.两边一样就顺时针
          // 2.根据状态旋转图片
          UIView.animateWithDuration(0.25)
          { () -> Void in

               let transfrom = button.selected ? CGAffineTransformMakeRotation(CGFloat(M_PI - 0.001)) : CGAffineTransformIdentity
               
               button.imageView?.transform = transfrom
          }
     }



     func didClickFriendsearch()
     {
          CZPrint(items: "点击了左边")

//          let VM = CZUserAccountViewModel.sharedInstance
//          print("VM: \(VM)")

     }

     func didClickPop()
     {
          CZPrint(items: "点击了右边")
     }

}

// 扩展CZHomeViewController, talbeView显示数据
extension CZHomeViewController
{
     // 返回cell
     override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
     {
          // ?? 前面的可选没有值就使用??后面的值
          // ?? 前面的可选有值只用??前面的可选，进行后续的操作
          return statuses?.count ?? 0

     }

     // cell显示内容
     override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
     {
          // 根据identifier区缓存池中查找，缓存池中有就返回一个cell，缓存池中没有，使用注册的cell类型来创建cell
          let cell = tableView.dequeueReusableCellWithIdentifier(reuseIdentifier, forIndexPath: indexPath) as! CZStatusCell

          // 获取到对应的模型
          let status = self.statuses![indexPath.row]

          // 设置cell内容
//          cell.textLabel?.text = status.text

          // 1.数据源给cell设置对应的模型
          cell.status = status


          return cell
     }
}


//// --------- 封装后
//
//func test5()
//{
//     CZNetworkTool.sharedInstance.request(RequestMethod.GET, URLString: "", parameters: "", success:
//          { (_, obj) -> Void in
//
//          })
//
//          { (_, error) -> Void in
//
//          }
//}
//
//func test6()
//{
//     CZNetworkTool.sharedInstance.request(RequestMethod.GET, URLString: "", parameters: "", success:
//          { (_, obj) -> Void in
//
//          })
//
//          { (_, error) -> Void in
//
//          }
//}
//
//func test7()
//{
//     CZNetworkTool.sharedInstance.request(RequestMethod.POST, URLString: "", parameters: "", success:
//          { (_, obj) -> Void in
//
//          })
//
//          { (_, error) -> Void in
//
//          }
//}


